﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MoroMoro.Samples.ToDoList.Domain.Categories;

namespace MoroMoro.Samples.ToDoList.Presentation.Views.ToDos
{
    /// <summary>
    /// ToDo 構築ビューです。
    /// </summary>
    public interface IToDoBuildView : IBuildView
    {
        /// <summary>
        /// ToDo のタイトル入力フィールドのテキストが変更されると発生します。
        /// </summary>
        event EventHandler TitleTextChanged;

        /// <summary>
        /// ToDo のカテゴリ入力フィールドの選択項目が変更されると発生します。
        /// </summary>
        event EventHandler SelectedCategoryChanged;

        /// <summary>
        /// ToDo のメモ追加ボタンがクリックされると発生します。
        /// </summary>
        event EventHandler MemoAdditionButtonClick;

        /// <summary>
        /// ToDo のメモ削除ボタンがクリックされると発生します。
        /// </summary>
        event EventHandler MemoRemoveButtonClick;

        // メモテキスト入力フィールドのイベントハンドラは AddMemoArea メソッドで登録します。


        /// <summary>
        /// ToDo のタイトル入力フィールドのテキストを取得または設定します。
        /// </summary>
        string Title
        {
            get;
            set;
        }

        /// <summary>
        /// ToDo のカテゴリ入力フィールドの選択項目を取得または設定します。
        /// </summary>
        Category Category
        {
            get;
            set;
        }

        /// <summary>
        /// ToDo のメモ一覧入力フィールドの選択メモエリアのインデックスを取得または設定します。
        /// </summary>
        int SelectedMemoTabPageIndex
        {
            get;
            set;
        }

        /// <summary>
        /// ToDo のメモ一覧入力フィールドのメモエリア数を取得します。
        /// </summary>
        int MemoTabPagesCount
        {
            get;
        }


        /// <summary>
        /// ToDo のカテゴリ入力フィールドにカテゴリ一覧をバインドします。
        /// </summary>
        /// <param name="dataSource">カテゴリ一覧。</param>
        /// <param name="valueMember">データソース内の値のメンバー名。</param>
        /// <param name="displayMember">データソース内の表示用テキストのメンバー名。</param>
        void BindCategories(object dataSource, string valueMember, string displayMember);

        /// <summary>
        /// 指定したインデックスのメモエリアにあるメモテキスト入力フィールド値を取得します。
        /// </summary>
        /// <param name="memoIndex">メモエリアのインデックス。</param>
        /// <returns>メモテキスト入力フィールド値。</returns>
        string GetMemoText(int memoIndex);

        /// <summary>
        /// 指定したインデックスのメモエリアにあるメモテキスト入力フィールド値を設定します。
        /// </summary>
        /// <param name="memoIndex">メモエリアのインデックス。</param>
        /// <param name="value">値。</param>
        void SetMemoText(int memoIndex, string value);

        /// <summary>
        /// メモエリアを追加します。
        /// </summary>
        /// <param name="textChangedEventHandler">メモテキスト入力フィールドのテキスト変更イベントに登録するハンドラ。</param>
        void AddMemoArea(EventHandler<MemoEventArgs> textChangedEventHandler);

        /// <summary>
        /// 指定したインデックスのメモエリアを削除します。
        /// </summary>
        void RemoveMemoArea(int memoIndex);


        /// <summary>
        /// ToDo のタイトル入力フィールドのエラーを設定します。
        /// </summary>
        /// <param name="message">メッセージ。</param>
        void SetTitleError(string message);

        /// <summary>
        /// メモ一覧入力フィールドのエラーを設定します。
        /// </summary>
        /// <param name="message">メッセージ。</param>
        void SetMemoListError(string message);

        /// <summary>
        /// メモのテキスト入力フィールドのエラーを設定します。
        /// </summary>
        /// <param name="memoIndex">メモエリアのインデックス。</param>
        /// <param name="message">メッセージ。</param>
        void SetMemoTextError(int memoIndex, string message);
    }
}
